import {ACCESS_TOKEN} from '@/store/mutation-types'
import storage from '@/utils/storage'
import * as LoginApi from '@/api/login'
import * as UserApi from '@/api/user'

// 登陆成功后执行
const loginSuccess = (commit, {token}) => {
    // 过期时间30天
    const expiryTime = 30 * 86400
    // 保存tokne和userId到缓存
    storage.set(ACCESS_TOKEN, token, expiryTime)
    // 记录到store全局变量
    commit('SET_TOKEN', token)
}

export const state = {
    // 用户认证token
    token: '',
    // 用户信息
    userInfo: null
}

export const mutations = {
    SET_TOKEN: (state, value) => {
        state.token = value
    },
    SET_USER: (state, value) => {
        state.userInfo = value
    },
}

export const actions = {

    // 用户登录(普通登录: 输入账号、密码和验证码)
    Login({commit}, data) {
        return new Promise((resolve, reject) => {
            LoginApi.login(data, {custom: {catch: true}}).then(response => {
                const result = response;
                loginSuccess(commit, result)
                resolve(response)
            }).catch(reject)
        })
    },

    // 用户信息
    Info({commit, state}) {
        return new Promise((resolve, reject) => {
            if (state.userInfo) {
                return resolve(state.userInfo)
            }
            UserApi.getInfo().then(response => {
                const result = response;
                commit('SET_USER', result)
                resolve(response)
            }).catch(reject)
        })
    },

    // 退出登录
    Logout({commit}, data) {
        return new Promise((resolve, reject) => {
            LoginApi.logout(data, {custom: {catch: true}}).then(response => {
                storage.remove(ACCESS_TOKEN)
                commit('SET_TOKEN', '')
                commit('SET_USER', '')
                storage.clear()
                resolve(response)
            }).catch(reject)
        })
    }

}
